/**
在09_TS中，类的类型特性是指类在TypeScript中如何定义和使用类型。
  1. 类的基本定义
  - 在TypeScript中，类使用 `class` 关键字定义。类可以包含属性、构造函数和方法。

  2. 类型注解
  - TypeScript允许对类的属性和方法进行类型注解，以确保类型安全。例如：
  class Person {
      name: string;  // 属性类型注解
      age: number;

      constructor(name: string, age: number) {  // 构造函数参数类型注解
          this.name = name;
          this.age = age;
      }

      greet(): string {  // 方法返回值类型注解
          return `你好，我是${this.name}，今年${this.age}岁。`;
      }
  }
  3. 访问修饰符
  - TypeScript支持三种访问修饰符来控制类属性和方法的可见性：
    -  `public` ：公开访问，默认修饰符。
    -  `private` ：私有访问，仅限于类内部。
    -  `protected` ：受保护访问，子类可以访问，但外部类不能。

  4. 静态属性和方法
  - 类可以定义静态属性和方法，使用 `static` 关键字。静态成员属于类本身，而不是类的实例。
  class MathUtil {
      static PI: number = 3.14;  // 静态属性

      static areaOfCircle(radius: number): number {  // 静态方法
          return this.PI * radius * radius;
      }
  }
  5. 继承和多态
  - TypeScript支持类的继承，子类可以继承父类的属性和方法，并可以重写父类的方法实现多态。
  class Animal {
      speak(): string {
          return "动物发出声音";
      }
  }

  class Dog extends Animal {
      speak(): string {
          return "狗叫：汪汪";
      }
  }

  const myDog = new Dog();
  console.log(myDog.speak());  // 输出：狗叫：汪汪
  6. 接口与类
  - TypeScript中的接口可以用来定义类的结构，类可以实现一个或多个接口，以确保类遵循特定的结构。
  interface CanFly {
      fly(): void;
  }

  class Bird implements CanFly {
      fly() {
          console.log("鸟在飞翔");
      }
  }
  7. 总结
  在TypeScript中，类的类型特性使得开发者能够定义清晰、类型安全的对象模型。通过使用类型注解、访问修饰符、静态成员、继承和接口，开发者可以构建灵活且可维护的代码结构。这些特性提高了代码的可读性和可重用性，减少了潜在的类型错误。
 */
class Person {}
/**
 * 类的作用:
 *  1.可以创建类对应的实例对象
 *  2.类本身可以作为这个实例的类型
 *  3.类也可以当中有一个构造签名的函数
 */

const name: string = "tom"
const p: Person = new Person()
function printPerson(person: Person) {}

function factory(ctor: new () => void) {}
factory(Person)

export {}
